{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "spiral_classification.ipynb",
      "provenance": [],
      "collapsed_sections": [],
      "authorship_tag": "ABX9TyNfPbOVAyagjR1F8nWNHNl6",
      "include_colab_link": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "accelerator": "GPU"
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/OUCTheoryGroup/colab_demo/blob/master/03_Spiral_Classification.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "cG-6FnJWGy2Q",
        "colab_type": "text"
      },
      "source": [
        "## Spiral classifciation\n",
        "\n",
        "本次的代码教程里解决 sprial classification 问题，教程有配套的文字版讲解理论，地址为：https://atcold.github.io/pytorch-Deep-Learning/chapters/02-3/   基础一般的同学可以适当看看理论\n",
        "\n",
        "下面代码是下载绘图函数到本地。（画点的过程中要用到里面的一些函数）"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "rtYBgyc48AAY",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "!wget https://raw.githubusercontent.com/Atcold/pytorch-Deep-Learning/master/res/plot_lib.py"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "6bjVuFccHshH",
        "colab_type": "text"
      },
      "source": [
        "引入基本的库，然后初始化重要参数"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "dID-vBkv7CTp",
        "colab_type": "code",
        "outputId": "26569b33-6afe-4d6a-852c-f6575af2deed",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "import random\n",
        "import torch\n",
        "from torch import nn, optim\n",
        "import math\n",
        "from IPython import display\n",
        "from plot_lib import plot_data, plot_model, set_default\n",
        "\n",
        "# 因为colab是支持GPU的，torch 将在 GPU 上运行\n",
        "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n",
        "print('device: ', device)\n",
        "\n",
        "# 初始化随机数种子。神经网络的参数都是随机初始化的，\n",
        "# 不同的初始化参数往往会导致不同的结果，当得到比较好的结果时我们通常希望这个结果是可以复现的，\n",
        "# 因此，在pytorch中，通过设置随机数种子也可以达到这个目的\n",
        "seed = 12345\n",
        "random.seed(seed)\n",
        "torch.manual_seed(seed)\n",
        "\n",
        "N = 1000  # 每类样本的数量\n",
        "D = 2  # 每个样本的特征维度\n",
        "C = 3  # 样本的类别\n",
        "H = 100  # 神经网络里隐层单元的数量"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "device:  cuda:0\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "G5yIuwZNJyj9",
        "colab_type": "text"
      },
      "source": [
        "初始化 X 和 Y。 X 可以理解为特征矩阵，Y可以理解为样本标签。\n",
        "结合代码可以看到，X的为一个 NxC 行， D 列的矩阵。C 类样本，每类样本是 N个，所以是 N*C 行。每个样本的特征维度是2，所以是 2列。\n",
        "\n",
        "在 python 中，调用 zeros 类似的函数，第一个参数是 y方向的，即矩阵的行；第二个参数是 x方向的，即矩阵的列，大家得注意下，不要搞反了。下面结合代码看看 3000个样本的特征是如何初始化的。"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Rk2qVCTeIE5D",
        "colab_type": "code",
        "outputId": "de0334f5-4850-4d21-e2d9-abf9aca66f83",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 69
        }
      },
      "source": [
        "X = torch.zeros(N * C, D).to(device)\n",
        "Y = torch.zeros(N * C, dtype=torch.long).to(device)\n",
        "for c in range(C):\n",
        "    index = 0\n",
        "    t = torch.linspace(0, 1, N) # 在[0，1]间均匀的取10000个数，赋给t\n",
        "    # 下面的代码不用理解太多，总之是根据公式计算出三类样本（可以构成螺旋形）\n",
        "    # torch.randn(N) 是得到 N 个均值为0，方差为 1 的一组随机数，注意要和 rand 区分开\n",
        "    inner_var = torch.linspace( (2*math.pi/C)*c, (2*math.pi/C)*(2+c), N) + torch.randn(N) * 0.2\n",
        "    \n",
        "    # 每个样本的(x,y)坐标都保存在 X 里\n",
        "    # Y 里存储的是样本的类别，分别为 [0, 1, 2]\n",
        "    for ix in range(N * c, N * (c + 1)):\n",
        "        X[ix] = t[index] * torch.FloatTensor((math.sin(inner_var[index]), math.cos(inner_var[index])))\n",
        "        Y[ix] = c\n",
        "        index += 1\n",
        "\n",
        "print(\"Shapes:\")\n",
        "print(\"X:\", X.size())\n",
        "print(\"Y:\", Y.size())"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Shapes:\n",
            "X: torch.Size([3000, 2])\n",
            "y: torch.Size([3000])\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "bslCqMkF8IAk",
        "colab_type": "code",
        "outputId": "617d86ef-16b8-444e-9fe7-f2fd43c8c048",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 248
        }
      },
      "source": [
        "# visualise the data\n",
        "plot_data(X, Y)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOcAAADnCAYAAADl9EEgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0\ndHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO2dd5wjdf3/n5nd273bu6Pp0UU9gaNX\naYrAEFFQkFAVJOQXQVAUBERF5IuADWyAgoAgIUYpghhEUIE4Kh2kST1Aeu/lbu9uy+T3x2uGlJ3U\nmckme/N8PPYBl0xmPsnM+/N5f941ViwWiYiI6D6MyR5ARESEN5FwRkR0KZFwRkR0KZFwRkR0KZFw\nRkR0KZFwTjHmzZsXmd+nCJFwRkR0KZFwRkR0KZFwRkR0KZFwRkR0KZFwRkR0KZFwRkR0Kf2TPYCI\ndrEM4NPABsA48Djwz8kcUUSwRMLZk1gGcB2wAyXtZxx4+8MfXhOwfghsAnwAWAF4DvgH8DaQB/O+\nDg84og1iUcpYL2DtCKwPPAZ8FjgA6PM6slgsEovFikDM4+1xYAQ4EbgWzHvqXHMQ2BBYDDwIpt3+\n+CPaIRLOScFaAZgJPKeH3toc2B54FbgUmAtsCbwAxIGvIC1nAG+ha5VxYAnwGzCP8BjfKsBtwHvR\nJPAEcBJwOZijAVw/ogki4ewIVgz4CLAGsBuwFxKQJ4DTnb9+JHh9SFUtOscYhGe4KwIPAweC+Z+y\n8d7kjLecJcCdwA6RgHaGSDhDx1oJuBdYCQlD+cpnO695qqgdZATYCMz5+qc1irc9YhHwC+BUMN/o\n2OiWUiJXSiBYK4G1D1ifAmta2esG8BASTJiokhqEK5ivA78GLgFeRBOBFwNoL1s+Li9mAF8DHgNr\n3aAGGeFNZK31jbUx8G9KgvcoWNuCuQg9yMt3cjSOQQhgIfDJKnXVHesyHh9d1jlmBeARYJ0al5gO\nDAIZYOtgRh3hRbRy+ucCYHbZ37rAl5z3tu/0YBzBXABsUSmYAOa9wKZIna5mRbB2AJ5FBqm6l0Fu\nmogQiYTTP6tRqa7OAA4Hq4A0k466IMbGxgFuAfMh7yPMx5FLppqVgavR+AcaXGYEuKPtQUY0RSSc\n/rkJPazlfBDYEdgFf7/xy8ANwB/RnrGWoNvO3zsvvvgGwBcanPdKZNxxGQZuAYbqfGbM+VuMLLyN\nrhHhk0g4/XMwcBd6cKuFx+/vOx3YFfgu8Fqd87mvH7/zzt8FzGcbnPf/gGspCdyfgJPxFn43cOG7\nyO85F9gEzFea/xoR7RAZhNrGmg7cCmyEHurz0Yr5iQAvMoRWzDHn/8eofc8M4JS5c1du4rTmEiAB\n1iygCOZCvW79HkiWHTgC7ANYYL7jvPZWi98hok0i4Wyfm4CNnf/vAw5FKl+Q9FN5j4rICltEE0K1\n1XVwr72qYwfqYS6oeiGNJoMDgHeAo8C8pqURRwRGFITQNpYbvdNJ3gK+g/aH/0WqboWALlkyyuDg\ntA3AfKDDY4sImGjlbBqrH1gR+CpyR0wGA8DfwPyfM6ZDgYvLD+jvN0DhgZFw9jiRQagprJOQyvoc\ncCywMzKUdIoFyLp6XEkwAcxL0Or5LuPjRQhevY6YBCLhbIh1KHACpTA716c5zfv4phkF/lfjvSIS\nyOeBFLLYrgvm6R7HHo9cIQDjw8NLAHI+xxbRBUTC2ZgTGrxf7X5YjKy41yFfoNcK+xxwLrBqjXO+\nAeZs4H3AesBVwH/BOtnJcCnDPAf4PFJvf7X77t8HzBcajDmiB4gMQu9i7YbiRZcDbgf2RPGl/6B+\nDuUClJsZQ4I66vwNoJVxISWrrhsxtAj5MKv3/DYS7gPB/CNYRwPfoxQcsBD4Bphn1xrMvHnzivPn\nzw8i5zNikolWTgCsdVDmxnuQ+rol8B/gGhonN88qO8ZAQeGzkHCuC2yO/IUXIKHsc96vzkYZRxPB\nRyWYgHyM5VE7M5GxJ2IpILLWim2r/t2HYmaDIIbiVTehUtBcgR5BgvkW8HkwXy475mUqc0Bt57WI\npYBIOMVraMULiyLwCjLcuAJqA/cAFyFV9mIwX6/63LGoiNd05xyLUOhdxFJAJJziEYJV8YvOn4GE\ncBj4OvBzJGzjSND2rXSNVGM+BNaGwN7OeS4D87kAxxnRxUTCWcKmvaoEXpXurkTB5J9H6uqJYD7i\nGJ02RHvOe0sxrfUwn0ZCHbGUsZQLp7UDKmT1EirpMaeNk9yKDEjlgr0TkAXzk5WHmkUUdhcR0ZCl\nWDitU4GjKf0Gw3ivgo14Bxl1ZpS9Nh3Vmc37HGTEUsxSKJzWTOByFIJXTr1E43rMRfVlP0hJsBcB\n89s8X0QEsFQJp7Uyqhl7MKWggCB4P1o5XcNPP6pc8Md6H4qIaMRSIpzWh1DNm0GkfgYZQTPN+RtF\nOZ5Hluq/RkS0z1IinPwYlX4MMyJqGqq291KI14hYipji4XuW+/1WZeJ3DSOoeBAFtEdE+GaKrpzW\nWsCfgXlgLUTW005gAFt16FoRU5wpuHJaBnA9sDbaW87CexJqZt9ZvbqOoFC7t5Dx5yLU4MfFRs2J\nIiJ8MxVXzpVRbxI/E88ClEXyRSr9l33Ab5Hx5xfAU8A8NBEUkaB+0cd1IyLeZSoK55s0rljeiBlg\nfg0sgMMprbJ9wEFo9YwDmwHbAB/VZ7gFzDd9XjsiApiSwmkOg/U6ys2sRaNIIPe9B9BqOL3qvRnA\nmsCTaG97RHNxshERzTMFhRNQgeej8F5Bx1FEz+p1Pu+WHhmithAbqAL6/ij3szriqKtIJXIboeZD\n92fzyceb/Mx0NBG9mc0nJ7VkRiqRi6EJd3E2n6yutzslmaJlSqx+1JcyXeOAEeqrvi+Auapj9b0b\nVSCoxzgwC8xJr3rnVaYklch9H01Wo8gf+8VsPnlRKpEbBH6DKi6MAj9AE9tmKE0tjVR5G/grsF82\nn3wnlcjNQ4L+IMqF3QDFGD8MbIeipu7O5pP3Odef61yjCFySzSefbuU7pRK5FVD7iA3RpHgmcPRk\nTxhhMwWF05qFqs99mvYq5I0B3wXzh875tgHOQfWEXIGuVovH0D51rL0xB0e1cKYSuQ1QTaRyw9Zi\ntAqditoVuhrUEkpNkbwmpBeAx1HplSXo91iCBKYfBWCsSCmX9Qjn2jdTSmZfBGyRzScfafRdnNVy\nb9THZc2ycS5EE8zFtT47FZgCaq21I+rvMQPlUB6ABLPdED2DikLN5i1gvcTEZrLuKrQQ+NVkCmYq\nkdsCOA6YsfzseeWvbwn8jUrBBAnfHLQylj8DjapBrOL8QWkfXn7uD1YdfxZQoFQADbQS/z6VyJ0F\nXN5ARc0g4ayeKGYiI9yUFs4eXzmtb6HqdO4K6bZI8BM7WwS+DuZpZddxK+y5jAP/Ap5BD9/vnFzN\njpNK5DYFbsTJqhm3R+gzBvYH/uKMb1mPj9koM2cfgo0zrmYxUn0387j+IrTSbpbNJyc0R0olcmui\n3NfqiQXns8dl80mvOr5Thh5eOa0ZVAomtFfJoJpRJtaafZVK4XRr/pwfwPUqcPZXe6LvdVU2n2zU\nzu8wyh7gPmMAtIo+Sn1j1u6+B9uYaah2UnV3NAP9nqsBXwF+6PHZ5dC9KBdOt47S/WirMaXp5Qgh\np33dBPx2kh4G/lD6pxVDaWbDSIVdgFwsgVdVTyVyq6CV5gzgZ8ADqURu/QYfG2SiEA6iKn31jF5e\nnwuaPuCT1F4EBoHVU4lcdbc0UIAHlO6xjSKz9gY+ms0nJ934Fja9LJyvIj9jNX6+0yiwGZgv6p/W\nV5FQ/h3N1t8CDgS2dXpcBs3xyFAzhFaM2UAj1a1CwJxtysrIeHMGrfd06aR6Pg4cAryWSuT+6Qqp\noz3cjoTbHc+jwFbZfPKv2Xxy0g1vnaCH1VqzCFYchfGsGdBJx1Ez3Cecc59KyfCxCfAKmLsGdC0v\nVqPynsRQKGIFqUSuHzgGtbbfsPy9WCwG0ioOBJZvYwydrBZfbh/YGrlIDkTfbVUqreOvNGPhnUr0\nsHACWmVq9Rtph+nA78FaBvgYlfudAee1MPkz8HFK+9thZNh5F8cC+w/q+15jwEkEVxg7LMongkFg\n21Qi14cEdaDquFVYyuh14fwc7df+qcUAakj7EjI+lJ//lYCvVU0GuSOOQavKpcB3U4ncAFJ5Pw58\nmOb8t90umNUUgafRFmIbj/cHUoncMtl88u3ODmvy6HXhDBq3MvtbSFAOQSqzO8MfFPQFU4ncZsj4\n817gCuBEnM5mbgRMKpG7HNiF4CeibiKGtKD3423IWhFFL+3b6ESpRG55VMR7DRTZdEkvRhP1unBe\nhVoWBMUw8EnHZ7kYrK2AzyBf4T/rV2dvnVQi9yHkL3Wd9HOB5bP55BFlx8xGbo9ev1fNsFad9wYB\ns9EJUoncLOAuSntWt1vcd4MYYCfpZWstwG3IKhkUfVTsbcwRMC8H8zdBC6ZDAj1A7so8BHw1lcj9\nLpXILVc1rqAZbnxI19HMtmJ3pIW4q+9M4FgnFLCn6NHZ2OpD6s1qqDD0j1GjWb9MQ0Hc1wVwrpqk\nErlN0ExerjK7uPGk6zjGnw08jgmCTpVuCYoi8jd7kkrkDOD7wJFMjCrqQwtRq26lSaUHhdPqQ0aD\nrZEwjaFIoW/SnuugnHHU1Cg0UoncrsgqW0/gBlFH6/dRO7OmXcqbLPUSRcBIJXLbIj/ue1Ei/CBw\nHvJRH83E+ODFwF+z+WRPCSb0lHBaM5EPbCtkzXONIwMo1SkI/oAa5oZJjuZWQgOlts1rdGCLxJzz\nBtnycAT4HfCFAM9ZjYFKxKyGvkO5xfq7yIhX/Z2KQBaly/UcPRL4bg2hTtPvR+pYELP+IhS0fh+K\n47wIzBsDOG9NHNWr2Rn8EbRfWpXg1doiWmmqraLuquper9nrjgOXIYuyV6D9ZDEOrJzNJ1+d7IG0\nQ6+oNp9DZvEhghnzKNIaXga+A+ZhYQsmQDaftFHYYTOsTWmVCJq3UXrd25Qmi6Lz7w8h7WRRC+eL\noWTrdvJnw2QMrag9Sa8I53IEe+PdFgr/D+WChk4qkYulErmtgZ+iB38c/0H67TITVUAYpGQJdieB\njbL55B2ogFkz8cNupshpaO/XjBV4CZoIwubIbD452oHrhEKvCOf1aBZsRKs6ukEH2rinErkhFIb3\nD+DbaJzHo3jdyaiH0498xNU2hz60ApLNJ29FQRH1ftNxlHO5fTaffCibTx6J4n0fq3H8CEqQ/jT6\nHcJkhB4P2ugR4TT/i1wnz1F/z1bvQX8Llc2spl6hL9+kErkPorC0TyET/7Loofk28nMG6tJwbAhP\no8iYO1Fdn38wUcgGUQqcWzVwGDnv/112zKHU9y0uAfbM5pN3ui9k88nbkMpcntI1hhpJbZ/NJ/dH\nq2bYGksfVcKZSuQGU4ncZ1KJ3H6pRC7ImOxQ6BHhBDCvRhEk9VbQWTVeXwz8BIXJVRNkEIMXWbxd\nPLNQClqgFvOiNOX1svnkp7L55Iez+eS6qEiZ1951EJV1+RFyQ3y83OWQzSffAXZAwrTE+RtHgv46\nsFeNSn4nIgPeMCWh3zGbT96aSuQ2B/6JXGFhMoK0A+Bd7eV2ZFU+F3jYqSLRtfSItdbFWh+4l9Yj\nZm4FtnU+dyPqOu1+8U+B+e9aH/RLKpFzi16V4z7cswjWpWG/ueAx48rrT6quvrcRiqYqX6Vt4NZs\nPvnRRidNJXLvQ2FwbnmTlxv5DZ2IHDfI4jHHGEYqkbsQSDX9jdpnFFVLODqbT46lErljkD/c/Q2K\nKLF9w26Nu+0hPyegrPp2Qtm2Qg7rM1BhqF2QkenfYD4Z2Oi8uR+Viyz/rd9BK1CQggnwPzDWSiVy\n89HqdFQ2nxzO5pP/TSVyJnAhsgLb6MHcu5mTZvPJZ9Bv1zTOA/+ox1tez5wNPITKbZanwi3Cu4ZQ\nM0xDiQqLkIbiuuFcYmiSvjyVyO3bjUEKPaTWAu0nVceQNfFFwADzz2D+tgOCCVolnkH74cVI1bKZ\nuJr6pQjMWWbmB0ACeCDa+wEy8GTzSbe85wrZfHKjbD4ZtkrvxTlUummGgS9k88kNkPp/MVr1RoCz\nnf9vlyFgv1Qidz7KxR3xOGYXtLfuOnpNrf0CKrfox4hyC5AA8+VgxlSbVCL3SeAUtBpcg1afDYAr\nCdZ/aSN1fVNU2sRlDFgum092VauIVCK3I7KSTwfOzOaTv6963/1tNkf3KygNz8Z7Qbowm08GHSbp\nm15Tay8EvsHEGrKtsDXwMFibgxlauz7Hp3kFJYvhF5G1eDuCEczySJ4i3hNWjC4M9s7mk/9AFuRa\n77t5rNV1df3iJZhFFCXWdfSaWgtwD/6KUMVQpYNTgxlOTfan0pQ/hJKodwjg3NUV5/uAjYFXbPtd\nY/ZC4Lwer1I3RvgFx94Ezkwlcss64ZVdQ1cNpj6WgfZQnwngZH2EX8ZjmImrVoxgVk2vcxSBXV54\n/TZQAP8xqCZsL3MutfecQUT+FNGW403kz307lch9OoDzBkIP7TmtXVFNnSCiPoaB74P5owDO5YnT\n7OcBwkmUrmYxcpWYtz70fbu6kVEvk0rkHkDpc9WMo0kq6AVmGFjHsVBPKr2051yD9s3qbhZGP7qp\nv0UJ2qHgGDR+Qfgq2TjwPMoP/VY2nyzOm/f9kC8ZLo5P9g/I9fEI9SOUwtD8xtEWIRLOFnie9lVC\nN//vDmD/kEqOlLMisD3h/r5LUHzuz7rVid4qTlFpC7lUYsiy7dXOAcLTSGbTJdk1PbTn5Cb8ZXHE\ngC2Am50+K2EStrCMoYpyP50qgumwERI6dxI20Dbm48ilYiO1cwmVsbtBUgQ+H9K5W6KHhNN8BXjD\n50liaFV7FqyGYWs+eAW4gXBSwmwU+vedEM492bzBxFVrAHgkm09+BNX03Z1gLN61iKESKJNODwkn\n4B0OVk0RFYS+ldpB8isAfwVrhaAGVsUyKB0syN/XRivGD4B1s/nkcwGeu1t4EPmGF6B7txA4x41k\nyuaTT2fzyeuddLbjUKTRAoKfBF+q0Vypo/SAcFpDZWrooTRWGcdQOtJV1N+j2lT1GQmQE9EE4Jdx\nVODrOBQbvH42nzwhm0++HsC5uw5HRT8QJcGfgCpgvFv/J5XIzXCjh7L55Gmo+v1XaC7XtxU+A9zv\nNFSaNLrYIGQNApcAuwIxsC5CD6qJjAa1BG8aqs5HnWNA6tJLwYx1AusQzMRnA3Oz+eQJAZyrJ3AE\n9I/lrzlpZtcgdfPtVCL3mWw+eUM2n3zQKcxdr9VhO0xHDaSOogPJ+LXo5pXze5R6O/YBe6HQvX+j\n3o31VJl6zv5FSF06H8yHAxttJTfQWg2eWkxjKWzgU46Th2khW4GBsomuL1vVwipDMoDz26cSuS1S\nidz+qURu45Cu5Uk3C+eOVPo1h4CdkGp7Oe09/K+g2fAzYB7R6GAf/IRgCkstpqrLWLeRMeKzM0Z8\n5YwRDyvwYS4Tk+gHgM86/389wVluq7dMB6USuddQ+t05wM2pRO7IgK7VkG4Wzieo3EuMoCyFn6Mm\nNfVa4NUiC+a5YNYMug6I9anMDmmXH2fzySsDOE9LZIz4Zhkjfl/GiL+ZMeLXZ4z4hB6hGSMeyxjx\nHwOvoXt1n9dxAfAO3lrQMgBOI90t8C5B0ypeq/AKaGGY7fz3lFQi954ArtWQbhbOo9GNf8f5W4hm\nzBm0H4ywZTBDa8hs/Bspjs3mkx1vvpMx4isiNXJ9VO9oO+B6j5UxARyGVO/pKIf0d0GPJ5tPPoVT\ndKyMUbRiusymVM3PXf3GaN2K20zwwQiqOB86XWwQMp8Bax1UonEc5Sr69e0FbTioxRz8xwCHtR+u\nIGPE/x+yBI+gfb77gLrCOA3VbtowY8SXA/6XtgvPoYmuXHuZhjSbMNgBpZgNogXlO25RsVQitxIy\nAJZrKqOo341JayGfzUz644BX3aTA6eaVEzDfBPOPYOaBq/EfeRO2OouT1ZDDfwhY6HVdHcE8C9gM\n5blejopKVz8X/chv/Gfg0YwRTyFVtrxGbZGQ4lGz+eRdaLXaDFg1m0/+tOztzalcIWNo1TwUbX9G\nkH/Yb8L5ONLkds7mk0EY+xrSxStnNebtYD2IQrzaYQnwZHDjqckx+F813ySksWaM+EZo374SWhHL\n6xjNQPWW7kT7uCEkgIPOe+4qdDYqGbMf8jW6qXEHhjFmACcv9SGPt17DO+72rWw+eXYqkbsAqee/\npInGu3X4K/CZToZL9pBwWuuhB6pd3ALIoeA4x7dEKq1fBoD/phK5nZxomLbIGPHpSNj6gJvR6nMr\n2iPWygn9EHIhuEW3VmLiZDOK8mE/jgqmzQZuS9uFVzNGfAgJ7HTgX2m70EzVeD/cDvwNud0GnLH9\n0CnrSTafXAK8nErkrqDUD7VVRlCh7FlM3P+GRo/kc1qzkBr1HtozBtnAsWD+JNBhOTiCeR4KmA6y\nSPR8pyhX08ybN684f/78WMaIr4Dqxa5BqVzJ7ahDm1/cFgwPALum7cLLABkj/n606rrWzHFgl7Rd\nCLvfqQHsgWJv78zmk1aN446jVLuoVdx6vTngYLfUZ5h0+cppxZwW8BtR2QG6FWwgDuY/gxxZFdsh\nFS/ohrR+rIKnopxIlz6CEUzQfRhCqu9zGSP+MjKSDFISTPeaV2WM+Jy0XQhtxXEEpTqqaC303DyV\nzSf/4xz3Q0fNfYLW75WborYvKtL9S1+DboIuNQhZO4D1AjAG1n3IKtiupdVGHY/DZI0QzjmK0qRa\nJmPE16HkpA+bftSm8CNIna3GQIEEHSOVyB2Aak1dAPwzlcj9vOztN/GXCzqTcLNi3qULhdNaDUXF\nrIzGtz4qJfl8myfsBzYDayeV1rTaNSjV426C/y3HUQB4U2SM+MyMEc8e/r9VQOpmEEEQrWBQW7Pp\nWAZNKpGbjrYYQyhQYSZwaCqR28Q5ZCb+fNBLaC47yjddKJxsQWVhrBiyEvqZfQ2UivQL4BawArUq\nZvPJ+4EvEWx2xACwZyqRa9ZP93tg35l2H3TPfR0Hvpa2C51sXvteJrrcRilpNxvjXVy6WQzg/FQi\nd3AqkTvRqU0cCt1yE8t5heBLUAwiS9tMNKP+GqxA99vZfDLrnH8rlDL2CFoxXqM9/6yB9jX3pxK5\nusm/TvTOpwl+z+uHIvDRtF04u8PXfZGJPs1plCz1r+HPBz0NBYj8EqW1/TGVyB3r43w16UbhvBlF\nfITp6HVr1wZKNp8cQeP+JqXO1O1amEGT1Bo0qLGbtgtFuq94dAzIOOGAHcOJtf0kmuQXo/uRzOaT\nTzqH/BeFJ/qhj5I7aiZwciqRCzz6rAuttWYRrH1QV6uz0MNdvpL6LYloo/2r35IntTiCYJu29iNB\nr0nGiA/QmRKcrbIOcE/GiG+JtianIFvClcBP03YhFHdENp+8K5XIrYxU3DequlsvS3BW63Jm4E9d\nnkAXCieA6bSasyzUX8R1Hi9Gwrlsiycco5Tj+Tiwi+OiCYOgO4ctQn1Q6rET3akFxVBAw8Povs1C\n49wEWXhDS79y3CsV/XBSidw0VCgu6AoHC7P5ZBApghV04w0tw3wNzAOQCro1EtIf0Xr+XgzYGZgJ\n5lpg1mqLHgTnEWwC8D1oD+tJxoh/BNV57eZ7OdP5c8c4xOR09toMRUAFzawwag518w0tw7SRQF6K\n6um0ujr1AUkwQ+8bks0nb0A1aF4imBKZWwP1Use+RrBqdFhMeNYyRnzfjBH/WIiJ2k2NIyAC/w49\nEL5nxVARJ7eVXrvcCObHghlTc6QSuVVRALvfDJUisFY2n5xQDDtjxC9HJVx6iXFKe+QiMgB+yjFs\nhYaj1j6Fd+mXWu0Bm8F2/saQNfg3wEl+Q/x6YeU8Ef+CCbAxWBmwOuKcTyVy2wBPE0z18BiVoXjl\ntBucMZmUG6/cLUcQDarq4hiGNkB2h+qJwI8sGMh+Mx1Z6I8BTvJxPt8D6hSH418wQREz+wF3gPUa\nWIvA+pMTVB8GVxGsBbWWa2kDH+dcDBwC/IvJdcUU8Q79C4O3gQzhFPx2GUIdzX3RpdbaCoJUdQaB\neWX/3g24B6zPgnlnUBdJJXJ9BG8RPDeVyK2Cbvy/gANarF/7Fprk3HYHC4EfpO3CecB5GSO+D/Az\nSiFvnXw2YiiVLVSc+3IHshaHjW/7Ri+snGfgP4u9Fn3IevdvsD4S1Emz+eQ48EJQ53PYEPnthoBd\ngFdTidwJby/33lmj05ryf38BqcZnoooHh6DtAgBpu3BZ2i6skbYLy6Esm1oFs5YQfC+YO9J24eqA\nz+nFjrSfrF+LWivw6X5P3Asr5/dQtMe+qPvUemhSCVJldLtO7xzgOXdDkSjualXdjdovMeCkuz66\nS5FYzJlmNdfu/+kxnj+0otbWTUDecfo3LAmatgu3OC6aO6mswbMAbTPOJthQwU0zRvwnwClpu/Ba\ngOetxu1eFiQFJPTlz+MoinX2RQ+snGYRzLPBNMHcBLkWAo3EcAjUHeHUvVkVVUd4H4q1DZ6+vhiG\nQfmtvOjqfta/8Uj2mP+l4uy5yx0CbNdqNE7aLjyEavwuQUL5JrBT2i5cSPArZz8yojyYMeJhFtG+\nhWCTE4oo4eF89BstRGVdvhVEUEIPuFKqsY5CjW/9rPpuM11XHxwGDgUz8NKOLqlE7iJkkOoIg4Nw\n7iWrEYvFxtA++0nHX9wSTsW9lYGn0nZhkfPaz1Dp0qAZA85O24XQCn6nErkdUKGy2cgIZtO6Rb3o\n/F2HnkULVfr7EHBvNp+8PYix1hXOefPmdZ3k7rHHNvzoRwcSi7WnnRSLRR577AXOO+/vHHrozsRi\nMS644Douu+ymgEdayfSB97DR3EOIYbQ99laIxeDCP61OsVikWITR0THOO+/vnHnm1fiekItw6BMr\nsdx4PzFHSyw6i2nMp9a40BjnvA+8yOK+8B+9PmOQzdc6ilisj1gsVva76Nu8M/wMywyV8uiLxXGK\nxXEMYxqudlwsjvHsqzfy/GvtPz/z58/3/NF6ceWcgdQHP0/B0cDpIcbXepJK5NZDdXyCcA3VZfOt\nBzjiWM+EkEvB/Jzf82eM+KqoAFjQYWtjgJW2C58I+LwTSCVy26FVtFas9jBqprU9qk9Uaxs4ArzX\nLSoWFD2w56zGXITqxfiJX7llbI0AAB53SURBVP0JcB9Yu4DVsd8gm08+iPahl6G9XGi+thqCCfBZ\nsA5zIq/aJm0Xngee9XMOh+oHuh+IZ4x4EFUMG/E29bdHQ6iznVct33LaScZoSA8KJ6D6qBcDrwL/\nQxXV7mnh832o/Eke+BtYHUu3yuaTb2fzyX2RH/RKAnb+zxiCzBWrNjrsLODFAEq2tFXjqIo7mRhg\nYaA6sWFzL7K2uq46L02q0STmNmsOPFKrB9VaL6xDUBeodlaDhcjndwVqL/dyO4aTdkglcqsB86mt\n5rYU7/nhbQbfOvxbc5qdwYsopWo1MNuaIDJGfBqKHW44G9ThLtRqo/rejQFz0nYhiAZFNXECE5Io\ngWADWjc0PgzsUpbMHRi9unKWYQ0ix3q7atp0VLngbVQy0e3REjpO6/g9UfSOawF0GaHx6lFEpVA+\nt09ymXmHf2tOK75HtxpE25UK0nZhFIXd+dlibIb3vYsRbjUMQAEj2XzyQvRbtiqYNvABQmqQNQWE\nk2Xx9z36UNEnt1vWKnRGpQIgm09ei5zjK6EqfgvQPuxJtKLXWjnGgHWz+eTq2Xzy0l33WmZNWt/D\nzkAtGfywH8EE91dzXgeqxZfzAK37zw30zFyaSuTiQQ9oCqi1Vgw90EEGEdjALMf41DFSiVw/ivvs\nA+7O5pMjTtrZtahUSb8zttdR3w4nHtWKob2T2cZlXwfmtOkD3QI1lg06n/SFtF3woyq3jFNE7S4U\nMNIOY8B/gOOz+WQhiDFNAeEEZZeQCPCEI8D0Trta2seahx6sdoRkMfB+MF9ueGQVGSN+MIohDdo1\nNIYKQo8Av07bhfsCPr8nqUTuGGTJ98MwEPfT48ZlKqi1IKNKkPyed2MlrfeA9Suw/g7WsUGX1AyI\nWbQfluYmCLdDWH0q+5FK/xXglowR3zSk61RzuMdrrU7QQwTUbW2qCOe9yG8YFAcCi8G6GKUYHQR8\nArlsLgzwOkHxAO13v7qoXWstClv7PVotRpho1PKL25Pl+ADPWQ+vgIp2DI2B/Aa+hTNjxD+UMeKX\nZYz4DRkjfkzGiE+GwF+C0qAWE4xjv8/52wO5CdwY3CHkxA89wqdFlgAHt/nZFFgbtvPBtF0opu3C\noSjG1M268RubWD1RuLVhO8FfCCAPk9pVK1rClyBljPjKaBO8B7AtKs3w87ofCgWziHxVGyPVJChD\nziATzetFukrjsPqQj/aKNk8wCPzeZz7r9gRXErQ6IGQYZX2EitNG8Fq0RVqEKsffhbebqNHKGEhV\nB78P2R7oprg/6BBKoZkEzCKYj4D5KyAOXIP/9CAvQVwMnA5WmQpkrQbWyWCdFmTSdpN8EancM4B2\ng9o3BK4Ha482x7Cgzc/Vw0Y+3K+k7cLlIZz/XZz+qpejPNX1nWufj3Jyyyf6RZRqINdjKJXI+V49\n/Qqn15PQBRZO8xY0cfit6u6lps1GTXILisu1VgPuA76NiiRfB1boxarK2JgyK62PjJcZtK/1HIVW\nuCKlmGG/z8FC4EtO/mjYbIEmOLc8y0wUmHI8lcnmXpqUFzOBW1OJnK/6VH6F80+UqrCDblCnG9fU\n4mRU1iMMBtEMuwZwGDIkuDdtCOX4dQBrEH+hc9W0tbdzVradgB+i+78A/8I5Gzg5Y8RX8nmeZlie\niVrWGNrHlwdYNCsvBnoOtvIzKF9ugbRdeCljxD8M/ABF1vwZON1pP34a2hhfD5zQ4WgPUDObMBMn\nY+gGLsPEfdIcsF7CiR4BvgpmwNUbrD5kiAmqat0wypZpi7RduDljxG9BtZOCSiPbEGUgbRvQ+Wpx\nJ5XPyjjSAPzsow18Vuzw7bNL24XHKcvwzxjxFZD7YQX00K6LUm729nutFlkt5PM/g/ZEf0DFs1zV\ncgma9d0Z9wC0V/lawNffzPlrtn+nF4uQ6j8b1WlaAtbyYLa7HZhNZdt5v/QTUtxqOdl88lUn/O4S\nYHXgfuA2pBWV41UHyis5oYgMS76ydgKPEMoY8X3RZrq8ePM4MCttF0Juh2CtiSaFR5BjPWyr6nOo\nEt6aqE3fDPSQVzvNnwHTR2t6y0CayXBJcKw90KriRzsYBX6LJtchNLE8A2wM5nCrJ3PaKrxJsAnY\nL6XtwsoBnq8pUonciUxsgzHGxAWtvHq9iw0sm80nfRnKwnh4azm0Q0zDsmJgnYd6L14HPFZnHEGy\nGnLEX4fSjS5GHbirZzwfaU/WSsjg9CjKwTwDrPeiosV+1fYlqLW9u+oPogD8ndo5mdNOYS+CKWXq\nFstKB3CudvCq9+Slafbh/az53saFIZzXohQo1z80DFyYtgthVMxz2Q34HFq5lkGr55uULIhhMoiS\nthcD30BZMq7QjDlj8KPS5lDmyAwUDPFF1OYhCItwrSTzthvBpu3C9Wgbc0e750DRTmcCm6TtQscy\nhKpYroVjvVbOE/wOIHDhTNuFd4DNUeDy39Egw273tg6VdVRj6MctoEri8wlPSGciv2r1KlZEldm3\nBrNGJ2VrU7AuAet6Z0XcC6xqwdiMSovhDOcvCGPXS2jVd7cbNjJi/MPPSdN24SX87YVnowkt8LZ6\nLfAfH5/tR7YGX4QSxJ22Cy/T2WCEB5Ea4X4fN3F2N6RyvI32hDuh0ibPonjZIKglJK41t0bLBGsf\nZMl1Px8HvqyxWhchp/i9zliDNLK4jKKV/hrgp8AOqAPX4eqL6hu/qq2bBP/ZAMbSEk4L+XkND6yP\nb9U+cOF0igIvAzzuZMp3gqtRQPpBaOZ3q6zj/Hc2MAam43awVkB7mbANRp8EHgVrWzDvKr1szUTq\narVgT0OCeDjwVaQSt1IbqVls5PK4zTH8VFslg+AHqEaSnxW+oy0by9gLWW2rcQP7Gz03i9DE4ovA\nrLWOpe5MlOrjth+4DAUTPw3cEHb/RbDWQPvNvzDRlXI6mEeVHXsGTbQmCIgiUh370V74HOBYwqkg\n0CzjaFVfB8xWGiI1TcaIj+D/Ox6ftgs/CGI8zZJK5A4DfsHEveTLaEX8YI2PjiH3yTe7LZ9zT+Tv\n60ezpYFUkvORkeiRjBE/PmPEQ8wwMJ8G8x7kHih3BQwjNbGcI1GL+E5YdWNoDzYNmAN8h8kPnu9D\nY/pUiNcIYjL+v4wR3yyA87TCbXiv+HNQzaBqRlBU1O3AJ4IQTAj2AdkI7+Y2g87fmigf8uaMEW/b\nGtgk/4e6kz2DjEH7gVlVktssgnkIamMfpiXZi6AbMfkhzCiquxof0pBB2k+HaxknO+UXeCdNeP1W\nNvBrZM/YLptPBubLD1I4H6VxFbYBpBKYABkjPidjxNcOXljNcbQ6/RAZg46sky0yQPcISidwJ6Jx\ntDe6JsRrxQmmcVA6Y8TXDeA8zTAX1XGq90yWP+cGsl+86bR+DIwghfMiFEfbiGnA3hkjfjqyRN4J\nPJkx4msHOBaQ2vozlHFgomwRr6apVzC5XZ07gY22FiZKCLgRhR1uHpBldgKODeLzBGN0HKUzDW+h\nOU2ieh89g+Cs/6WBBBm+59yQj6NUm49Se0VyDQXuD2EDD6btQlsZ+d5YT1C5PygCZ1Qahd49tpPG\noclgAbALmDeGcfKMEV8d+WNfRI1wixkj/nNUAygIrWgh8Im0Xbg5gHPVxVFrb0EJBV6LV60+qyPA\n1tl88u6gxhKoUcIpW3Gd8896quIAlV/QwL9fqRqvcMFaKtbLdEUeamiM4y8ooCYZI/4JVPX8tyh4\n4QKnQsZh+BPMMRRpthDIdkIwAbL5pE3J2+BSpKRd1VpZpyGtJDACtxhmjPjywDYebzUKpA6iKU45\nPyi7ZhHd5FrlLl6h80ahsHEfJjfqJ5CekeU4mtKlyK+8rPPfvVEygB9sZDH9ArB92i58xef5miaV\nyM1GCezli0uMxnaJGAE3MwrDnD/ExBVqFAUKlAvoGIrqecv52zfYYZgXoODwv6BUoG3ArFVC87fU\njOTpWZ5AWTM3AR8B03enZQ8GmBhiF0OriJ+9poHU5IMIxuLbCu1aW0dRYElghCGcL6B6pq5Fq4gC\nmQ9DUTwLkSP+JJSrtwcwN20X/MQy1sC8HMzdwNwfzPvrHLcYmes7nRAeFouAA8BcHcztwHwsjIs4\nCfRPUakCxlBcqt/wtRnAjoSfl1tBNp8cReppq0bCPrQQBEYYge82+lGvR+riHSiD4nRUtuFW9MN/\nFwUGPJG2C12wapnXIOvuCJo9m92D3g/c0MLxfmh4jQULFgHsDeZtYQ8mY8S/jApaF5EmNAIcg1L3\nfNXPcWinuVDbpBK5HVOJ3JeBf6NawK3iFfLXNqG3Y8gY8RnoAX4fE03QNvBQ2i5sEOogWsKag37k\nq1AHrmloRXWNBDZS52ykHfTRuTC8WpbCdzn77Gv48pd/Enpf+4wR3xOpcW4u6GK0bXH/3UrHMy+W\noLjibcIP+4RUIncaSsdz7+ci9B2anRzGgTnZfNJvUbl36UQI2Zao0JbXA2wA62WMeBe1ODBfAfNu\nlPaWQ416vgdshwIbFlMyEEyn8/Gx9R7UhQ8++EynxuFWT3CZjuKap+NfMG2kIu7UIcGci9IaZ6Kx\n91HSCJq9/iFBCiZ0RmVYnfoqzltpuxBEFEnAmC8xwbFsvUnHKut5EkMPrtfKOApccO21d3v1+wiD\n1/Au0REUDzi5wZ1gRaSSV7ubpiF1fYzaE84bwKbZfPKpoAcV6srplDU8u851lqBK7b3CKUy+P9Tr\nt3wHOAjMTgZSnOJcd5TgfxO3+l2neIjafuB+lPpWyxX4RBiCCeGrtTtRf3W+Om0XArVwhcwcJq5a\nb1AZ8OA29GmVp6kfh2qjOGEv+vBZ6a1V0nbhSVS68kSCDX+0kaX3twGesxFzqH/PNkA2iGoWoyio\nUAhbON3q37W4qc573chlVLoIFqJ96HaUZtYB9LC6D2yzD+430Z6nQOUsbTv/Pg5ZvRciY4VrnFoM\nfCksd0k90nbhWZTDGwQvI+v9r4FNnXN3ijkN3l8fVdWoZlFQ6WFehL3nvAbVqVnD41qLCO7Gdooz\n0P7kMCQcp6PE6XOoVIv6Udv4vwC7U79bchH4CZiX6p/WLs75N0Y+xD8DD4LpqHnWhmgyWIjKmDwP\nZhDV7tplGaQ9vBd/6Wezge+l7cJ/AxlVa6xF4wLSXo2JZ3u8FhihCmfaLix0KsJ/E+V7rodu5qPA\nXmm7MJIx4suhAPVn0nYhlAyJ4DBt1BPl25WvW149VRaBeThYazNRON3KCK8BG1UWcTZH0SRQawxP\noOifSSdjxDdCGS79NOHmacB0ZGzbOYChtUq7ydxPBjmIakK31qbtwhtUPcxOTOY+GSN+AKqzsxiY\nljHiB6ftwkVhjykEzkXpUe7sOkzJqnsiaifgrqyLUYzvI8DvwPRR03bSORdZ4oPwq8YIr7dNI55A\nmlwryQGjhDyRTJZ/8RRUxMr9MdzshfMzRvyfabvw/OQMq13MO8H6OKrAMAP4NZgXO+/dAtbHUBB3\n0XnvvskaaVA4lvgtCK6SglcpmU5xLipluS6NmznZyEq9YTafDNWp3HHhdNKJvo63f2wMlTN53jl2\nTZSZ/nDaLjzdsUG2hXkLNevxmHfR+QDusDmVYEucvMgk+JBTidw0tFi8H1na30QGoup0tyIqq3oz\ncHjYggkdFs6MEV8VPaS1HNeDwOMZI74i2qcehn6wgYwRPxq4IOTK8REeOCGYn0dq513AgajCfpDW\n/pXQ3i+EBAhvUolcP/o+5eGjy+PtVokhFf64TggmdL4C3KnUL5B8FlL/nkGr6wyUIzcDBTO87exT\nIzpExohPR0Hg56CaTH9Hghp0ZJDbTrGT7IZ3kn8tjWA68JvwhlNJp4XTy6XiMh8FHp9E7Qz6QeDX\nHSz2FKG44g8iYQwroN5dqe4M6fy1+DitxUbHkPrbETq953SbvXr5jJotU9KHWuw9FNSgIuri5XwP\nmhiaePehdrUKX6QSORNpZiugxP9LkZbWCiOoQkNH6PTKeQr6YfxgILU3ojMEmmlRh+koqCNwUonc\nuiggZF20t90P+BXNZ8+4sb730cEauh0VTif75HOofEa7XIcc3xGd4WQ6F4Q+PWPEw3gmd6FSS5yB\nd+X2WnwTBZJskc0nOxYo0/GWAE6lhDiqktAqC4BPdyLHL0I4/TH3JPwaSyPAv53nI2gWMjGpoBWD\n1rrZfPKVbD7Z0eduUvp1pO3CfKRe3ETjKvHlPAHM6q7k7KlP2i5cQzidyEaRf3MBKmuzVwjXAHUc\nd5MF2qGjGT8uk/aQO4WHd0I1hTZq8mNroXjUYsaIH5m2C2eHNsCllIwR/zxwFFppfoTuj416oDZK\nrm4lvraICsFt0IFk+8/TfsPhW4BMsMNpjtBrCDUiY8Qvpb2ymMOojEVFseGMER9CXZHXQoWaskuT\nGjxv3rzi/Pnz23J5ZIz4fuhBdDM0ximl/D2KDCr1zv0cEgIbWUXraWb3ofv3UjtjbYZUIjcDhYke\nR3s1ZRcC22bzyTB6pDakG9TDP6C0qkYpO9X0A1ujcCoAMkZ8mvPvdZGvdF8U/9mxosS9ipOMcBaV\n96GP0kq5XhOnWY1S5cL/h1LbdkS+xJUp+RSLwJshC+Y0ZDhcj/ZrGo0D/wtsUC0y6SsnQMaIP0Pr\nZQVtpOI+gZJhbRS9sheVs/sYsHzaLiwIYKhdTysrp7N3XwMV9V4XlfgMiiKqun8CqmpQHdn1eNou\nfCjA61WQSuQ+gQLpW8m5HKWkKSwCPpPNJ4P8TVqiG1ZOaK8AsYEClMuz2PdkotrlOriXCuFsRMaI\nvwdVwN8WrWSj6Le8NuBLxZALYh2UyLCQUsbHYtRXJUyGmGgAslEd5ZVQnGx1ito0FJ73beA1p2/K\npNEtwnkuChPz2/Xaa4+zkKnXasEPf0LbAVfFdNXWnUK41gDSZNx7MIiE1kItGsPkRqSWukaqEeCu\nbD65TSqRWw4n86mKRcCN2XyyHTdf4HSLcJ6OfsCf4i9+062r4z5w48DZS5NByMXpd3oa2gdeg7YA\n30FZF160uudvFjebA2Q1vdJp4xAq2Xzy1VQi91G0Eq6BbBGHOm+vhncxtWuBbNhja5au2HO6ZIy4\n03THFzalFXQRsE6jXFDHkHQcsD0yHsx1znMG8ONeEu558+YVj3109VVQ7PEy6LdwK9aHORmPUj+I\nfBHwjbRdOCvEMTSF00nsBSo1tUXAmtl8smsS/btl5XQ5AGWnlN/kcmFrhvJj+4HTMkb8V845b3IL\nFWeM+NZoP/Qw8A1UcqI6IP//UPLtuS1cv+M4zWsHgSdZC1DS9zRKv0VYq2I5BpX7Si+6otpiNp98\nJ5XI7Y0MRjZ6TtLdJJjQZSsnQMaIfwA1OVoDZbDUyvEr78tRjyWUaskuBBLIlzcPqTZFtDeqNQEs\nBrZL24U7mvsGncFxfRyEfquV0Xd8/PS5z29w5OOrfgNVFQi9Z0oZReQLXcvjuouBL6TtwsUdHE9D\nnBV0DeDZbD4ZRotEX3SdcJaTMeL34h09tAD4BfBV6ifoVkestFsh7m1gzbRd8GUoyBjx96E2iOuh\n5k5fSNuFtjJsarR1H3l45vDAOguHrqO2gadVTaRdiig07+vAJb20NegWJiW2tgW+hFa7cpO2a/R5\nnMbj93KrtMuHfXyWjBEfRBbE7dBKtwNwg/N6s+eIOf/tR5Ev1UnpAysvGQDtmWsR1D1/hfoFw2PA\n7Wm7cHEkmO3RbXvOCtJ24ZaMEd8YJfzug7LQn0dGm3MJp4mO1+o6E3g9Y8T7UAuCPuC+FusZrY8s\npe5v3o9C3NZFre5qkjHiWwJ/BFbLGPGF1DbujL82MNq33Fh/M+p+u9hoYjgH5UjujPekN4Im0Ig2\n6Wq11ouMET8G5Ri2UmPUL8Mo2KGAikEV0SSxbdouvOqMazm0l90BJSif4xz3P+RbnIfKcAxVnXfT\ntF14pNaFM0Z8eRQF1Uxs6JKz1nhh8CtPrxJm9y+A36XtQjJjxDdD8cvV38lGK+uHnbrFEW3Q1Stn\nDdams4IJiir5DrAJpTjNDyL/rBuWdi2K4wVYDhUzG0PGkL2Rj8/dCw6hh/g6ZESpRyuNhe0ZRQPC\nNwR9LmPEC2m7cGHGiG8FpNBE9CcUhjkGXJe2Cx1vE5FK5N4PXIAMU/cAB2fzyZc7PY4g6EXhvBnY\nH//RROU0MhTdivac5QHUA0jFxVlBNvf4XD9ywO+ODFtfQpXshtAE82ITY3uF2gXPqpm2/Eif+5mV\nmvxMO/SjiK4L03bhARSmN+mkErmZ6PlYCWkOKwP/TCVyG2bzySA7oXWEXhTOLLANynqYRjCrRCPh\nPJiJkTVLgLszRvwg4JfUN7SMopKg16F9Js71DgHuBs51ynP82HkN4Dzkn1wdWYub0Rb6P/3SCtAZ\nv2azE0Yn2QxNhq5KPw25SubSWEPpOnpOOB3L36EZI/4ttN/ZMIDTNrJgVtfaHUOr3q5IpWvEbORC\nqW41F0OGrnORy+HLlPZvR9OG22Oa5pigul+5BonqiWsYfZ9JJZXIbY7cSQaqa7yIiXvtPuf1nqPn\nDELlZIz4L9Gq1m6+XjfwDlodrwO2nOSxVPMG2retiwxg/WgFvxg4OW0XJk1VTCVyW6HMlvLmUZ9C\njaO2QuMcBv6SzSc/Oxlj9EvPrZxVfAsZTLZx/v0w2ttVz/RF9KAtw8Tv3CmnfC1mozjYVSZxDLWY\nlbYLO072IGrwbSqtxEPA8ahr3VfRc3E72h70JD0tnGm7MJwx4juijf84yuTfgImqzYtIgLcELqLy\ne3dDIMaqk3TdcTQxLEGunllV7z/V8RE1j5e2NJjNJ0eAn3d6MGHQ08IJ7+5BXwDIGPFd8PbvzUbh\ncp9CeYUrdmyA3c2DabuwEbwbffQ35Kcddf7aqe3UKc4GPkalWvuryRtO8HTDqhEk79R4fZbzdxne\neXxLK+929HImuZ2RdrEbMDdtF+6erIE1IptPXonaKfwXFQv7cjafvGRyRxUsPW0QqiZjxPdG9WoG\nKKUCVQe+H46CB3pea2gSdzKqbkS0CFg7bRee7fyQIpphSgkngBOxshPyS36JktpTBB5L24W1nRKQ\n38c7QHyM2oJbXWlhMhl3/tzcVy8/7VPIaHYF8vcdhpLZ30buoT6kCp7frcHpqURuPeAIZH29IJtP\n/muSh9QxppxwluP4Qk9GAvcWsGPaLjxc9v7LVPoei2jl3R2F4Hkx7pwvCEf/OIq0SaDSGdV+0Ea8\ngoIa3p0sbIoYxF4EDkvbhT9VfyBjxLcD/kpp0loIHJO2C+e0PvxwcQTzdjTWGNpX7pvNJ/02w+oJ\nptqes4K0XTgVGX82ANYoF0yH6j3qGApU35Xa6VAGWq2KzvF+KrT1AVen7cKmtN59bRy5hipWcWcw\nB3oJpsMXqXRBzKR76/oeSUkwcf7/5MkbTmeZ8vuutF14C62aXnwDyKGb7q6u56GInRG8zfUxSg/L\nA2jFqy6x2Ao/yxjxi4GrkHW0XHC8wgptFEy/2Bmzl+W5XgbLEo/zttKvppN4tVDoRGhiVzClV85G\npO3CFchpfRrag26I6grtSKVg2njX1l0fVax/jfatwNsBP0Or12VoNV+E6ts8WHVsEaWtfQ1F7XyT\nqpXbjhWhfq2eM5B66O5nhune1egCND6XhXR5PacgmdJ7znbIGPF90epZXv7EbbrjVaH8GrRnPAL4\nCf4C8RegCfMbabvwq4wRf56JkUO7p+3Cn6vG+3O0ej9z4fteWvNfT91fdwwZI74Rit2dgYxB1/kY\nc6ikErnd0OQxiHybZ3a6Fd9kEQlnFU6BMTetqxw3qLo8G2MJ8Iu0XfimUzrkHWrH+RaR+thPY41l\nCYoaepWJ7o+v1+uu5qeRUUR3sVSrtV6k7cKTwB5M7OY8A6UdvYBWuHdQLO/JzufG0Cpavn9bghK1\nz0UJ1x9DMaH3Oe/VChwfRZbb6iRhG3is9W8V0YtMeYNQO6TtwrUZI34Zql5QvgotRNUOtkB7zDvS\ndqFcGA9Be8K10Sp7GZCq6tZ8O/BjpxLfBSgHcQUqGUM+yj1RSJ2NVuzfoiazEUsBkVpbA6e6wQ2U\n1NtFwGfTduGqBp8zUArY4rRdqFsew9n73UplIvUoqk10u3PMe1CmzUtpu1BtIJpApNZOHSLhrEPG\niG+OkqAHgHODNpxkjPiRwClUugdG03ah7SoDkXBOHSK1tg5pu3AnqlcUFm8wMdqoVvB+xFJGZBCa\nXC5FLpphJKTDKFE4IiISzskkbRcWo5IaX0NZ/Ga39ROJmDyiPecUI9pzTh2ilTMiokuJhDMiokuJ\nhDMiokuJhDMiokuJhDMiokuJhDMiokuJhDMiokuJhDMiokuJhDMiokuJhDMiokuJhDMiokuJhDMi\nokuJhDMiokuJhDMiokuJhDMiokuJhDMiokuJkq0jIrqUaOWMiOhSIuGMiOhSIuGMiOhSIuGMiOhS\nIuGMiOhSIuGMiOhS/j8pRivutRLeKAAAAABJRU5ErkJggg==\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "XSWH6zlD8UiJ",
        "colab_type": "text"
      },
      "source": [
        "## 1. 构建线性模型分类"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "NQR6eE5Z8Wj2",
        "colab_type": "code",
        "outputId": "adcec397-2ba1-4372-ce1a-c2e2b92e1c01",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "learning_rate = 1e-3\n",
        "lambda_l2 = 1e-5\n",
        "\n",
        "# nn 包用来创建线性模型\n",
        "# 每一个线性模型都包含 weight 和 bias\n",
        "model = nn.Sequential(\n",
        "    nn.Linear(D, H),\n",
        "    nn.Linear(H, C)\n",
        ")\n",
        "model.to(device) # 把模型放到GPU上\n",
        "\n",
        "# nn 包含多种不同的损失函数，这里使用的是交叉熵（cross entropy loss）损失函数\n",
        "criterion = torch.nn.CrossEntropyLoss()\n",
        "\n",
        "# 这里使用 optim 包进行随机梯度下降(stochastic gradient descent)优化\n",
        "optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate, weight_decay=lambda_l2)\n",
        "\n",
        "# 开始训练\n",
        "for t in range(1000):\n",
        "    # 把数据输入模型，得到预测结果\n",
        "    y_pred = model(X)\n",
        "    # 计算损失和准确率\n",
        "    loss = criterion(y_pred, Y)\n",
        "    score, predicted = torch.max(y_pred, 1)\n",
        "    acc = (Y == predicted).sum().float() / len(Y)\n",
        "    print('[EPOCH]: %i, [LOSS]: %.6f, [ACCURACY]: %.3f' % (t, loss.item(), acc))\n",
        "    display.clear_output(wait=True)\n",
        "\n",
        "    # 反向传播前把梯度置 0 \n",
        "    optimizer.zero_grad()\n",
        "    # 反向传播优化 \n",
        "    loss.backward()\n",
        "    # 更新全部参数\n",
        "    optimizer.step()"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "[EPOCH]: 999, [LOSS]: 0.864019, [ACCURACY]: 0.500\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "34cKJNuafYks",
        "colab_type": "text"
      },
      "source": [
        "这里对上面的一些关键函数进行说明:\n",
        "\n",
        "使用 print(y_pred.shape) 可以看到模型的预测结果，为[3000, 3]的矩阵。每个样本的预测结果为3个，保存在 y_pred 的一行里。值最大的一个，即为预测该样本属于的类别\n",
        "\n",
        "score, predicted = torch.max(y_pred, 1) 是沿着第二个方向（即X方向）提取最大值。最大的那个值存在 score 中，所在的位置（即第几列的最大）保存在 predicted 中。下面代码把第10行的情况输出，供解释说明\n",
        "\n",
        "此外，大家可以看到，每一次反向传播前，都要把梯度清零，这个在知乎上有一个回答，大家可以参考：https://www.zhihu.com/question/303070254\n"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "0cXVBCk7b68f",
        "colab_type": "code",
        "outputId": "2b9861c7-c072-4562-9a75-695884d3ba89",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 86
        }
      },
      "source": [
        "print(y_pred.shape)\n",
        "print(y_pred[10, :])\n",
        "print(score[10])\n",
        "print(predicted[10])"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "torch.Size([3000, 3])\n",
            "tensor([0.1070, 0.1738, 0.1800], device='cuda:0', grad_fn=<SliceBackward>)\n",
            "tensor(0.1800, device='cuda:0', grad_fn=<SelectBackward>)\n",
            "tensor(2, device='cuda:0')\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "y8c6iBBk8fq3",
        "colab_type": "code",
        "outputId": "37651cd2-0e3f-424c-eacd-f4a3e9054ff5",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 317
        }
      },
      "source": [
        "# Plot trained model\n",
        "print(model)\n",
        "plot_model(X, Y, model)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Sequential(\n",
            "  (0): Linear(in_features=2, out_features=100, bias=True)\n",
            "  (1): Linear(in_features=100, out_features=3, bias=True)\n",
            ")\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "zWYPclNw8lh8",
        "colab_type": "text"
      },
      "source": [
        "上面使用 print(model) 把模型输出，可以看到有两层：\n",
        "- 第一层输入为 2（因为特征维度为主2），输出为 100；\n",
        "- 第二层输入为 100 （上一层的输出），输出为 3（类别数）\n",
        "\n",
        "从上面图示可以看出，线性模型的准确率最高只能达到 50% 左右，对于这样复杂的一个数据分布，线性模型难以实现准确分类。\n",
        "\n",
        "## 2. 构建两层神经网络分类"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "lPfPN5kN8oaz",
        "colab_type": "code",
        "outputId": "7d448936-c55d-48f9-8cc1-3f5a842a3b9e",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "learning_rate = 1e-3\n",
        "lambda_l2 = 1e-5\n",
        "\n",
        "# 这里可以看到，和上面模型不同的是，在两层之间加入了一个 ReLU 激活函数\n",
        "model = nn.Sequential(\n",
        "    nn.Linear(D, H),\n",
        "    nn.ReLU(),\n",
        "    nn.Linear(H, C)\n",
        ")\n",
        "model.to(device)\n",
        "\n",
        "# 下面的代码和之前是完全一样的，这里不过多叙述\n",
        "criterion = torch.nn.CrossEntropyLoss()\n",
        "optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate, weight_decay=lambda_l2) # built-in L2\n",
        "\n",
        "# 训练模型，和之前的代码是完全一样的\n",
        "for t in range(1000):\n",
        "    y_pred = model(X)\n",
        "    loss = criterion(y_pred, Y)\n",
        "    score, predicted = torch.max(y_pred, 1)\n",
        "    acc = ((Y == predicted).sum().float() / len(Y))\n",
        "    print(\"[EPOCH]: %i, [LOSS]: %.6f, [ACCURACY]: %.3f\" % (t, loss.item(), acc))\n",
        "    display.clear_output(wait=True)\n",
        "    \n",
        "    # zero the gradients before running the backward pass.\n",
        "    optimizer.zero_grad()\n",
        "    # Backward pass to compute the gradient\n",
        "    loss.backward()\n",
        "    # Update params\n",
        "    optimizer.step()"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "[EPOCH]: 999, [LOSS]: 0.213117, [ACCURACY]: 0.926\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "-Kl5U4j48y7h",
        "colab_type": "code",
        "outputId": "4e2274c1-ada3-456e-f590-540d9a715076",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 335
        }
      },
      "source": [
        "# Plot trained model\n",
        "print(model)\n",
        "plot_model(X, Y, model)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Sequential(\n",
            "  (0): Linear(in_features=2, out_features=100, bias=True)\n",
            "  (1): ReLU()\n",
            "  (2): Linear(in_features=100, out_features=3, bias=True)\n",
            ")\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nREHU+QAAAABJRU5ErkJggg==\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "FSwokqyTj7Gm",
        "colab_type": "text"
      },
      "source": [
        "大家可以看到，在两层神经网络里加入 ReLU 激活函数以后，分类的准确率得到了显著提高。\n",
        "\n",
        "里面有原因相信大家在专知课程里面已经学习了，如果不清楚为什么，请再返回去看看专知课程。"
      ]
    }
  ]
}